1. Field of the Invention
The present application relates to storage systems and in particular relates to improved methods and systems for maintaining cache coherency between multiple, redundant storage controllers.
2. Discussion of Related Art
Numerous computing and communication devices and applications utilize redundant controller technologies to help improve reliability of the subsystem. For example, in computer storage subsystems used for storing and retrieving data, it is common to utilize redundant storage controllers coupled to redundant storage devices such as disk drives to improve reliability of the storage subsystem. In addition, well known RAID storage management techniques may be applied to the data stored on disk drives to further enhance reliability and performance of the system.
Where redundant controllers are utilized, a pair of controllers may be configured such that a first controller is “active” processing requests from attached host devices and a second controller may be “passive” awaiting activation to take over responsibility for processing requests in response to sensing a failure of the first active controller. In addition, other configurations may be applied to make both controllers of a redundant pair active such that each controller is active processing distinct requests from attached host devices and each active controller is also operable to monitor performance of the opposing or peer controller of the redundant pair. Therefore, each controller is active and simultaneously ready to take over processing responsibilities of its peer controller of the redundant pair. Such a configuration may often be referred to as dual-active or active/active.
It is also generally known, particularly for storage controllers, to utilize cache memory structures to improve the overall performance of the controller device and thereby improve performance of the associated system or subsystem. For example, in storage controllers, it is common and that each active controller will maintain a cache memory such that write operations from an attached host device are processed by recording the supplied write data in the cache memory. At a later point in time, when the storage controller may be generally idle, information recorded in the cache memory may be posted or flushed to the disk drives for persistent storage. Such data recorded in cache memory but not yet posted or flushed to the disk drives as may be referred to as “dirty”.
In an active/active redundant controller configuration, each active controller utilizes its own cache memory to record data associated with read and write operations performed by that controller. Since each active controller also serves to stand ready to take over operations of its peer controller in case of failure, the contents of each active controller's cache memory must be made known to the peer controller. It is generally known to allocate an additional, alternate cache memory within each active controller used to mirror the contents of the peer controller's active cache memory. Maintaining such mirrored status is often referred to as cache coherency such that the active cache in an active controller and the corresponding alternate cache in a peer controller are maintained as coherent. Failure to do so could result in inconsistencies in the data recorded on the persistent record of the disk drives. For example, if the active cache in an active controller flushes dirty data to the disk drives, but the corresponding mirror cache in the peer controller still has the dirty data in it's alternate cache, later updates to that location followed by a failure of the active controller may cause the peer controller to flush old, previously dirty data to the disk drive despite the updates performed by the active controller just prior to its failure.
It is generally known in the art that dual-active controllers must communicate with one another to exchange cache coherency information to thereby maintain coherency between each active controller's cache memory and the alternate cache memory in the corresponding peer controller. In general, prior techniques for maintaining such cache coherency have required that flush operations that may post significant volumes of dirty data from the active cache memory to the disk drives must be mirrored in the alternate cache of the peer controller. Therefore, previous cache coherency techniques and structures have generally relied on communicating cache coherency information corresponding to flushed cache data between the active controllers.
Such flush operations may generate significant volumes of data to be posted to the disk drives and hence a corresponding significant volume of data to be exchanged between the active controllers. Further, the frequency of such cache flush operations may further exacerbate the problem associated with such high volumes of data exchanged between active controllers.
It is therefore an ongoing challenge to improve the efficiency of communications between dual-active controller having mirrored cache memories to maintain cache coherency while reducing overhead processing and communication to thereby improve overall system performance.